#ifndef MALBUM_H
#define MALBUM_H

#include "../core/dtalbum.h"
#include <QAbstractTableModel>
#include <QHeaderView>
#include <QList>

class MAlbum : public QAbstractTableModel
{
    Q_OBJECT
public:
    explicit MAlbum(QObject *parent = 0);

    /*!
     * \brief Destructeur
     */
    virtual ~MAlbum();

    /*!
     * Récupère les flags pour l'index
     * @param index : L'index du nodel
     * @return item : Les flags
     */
    virtual Qt::ItemFlags flags(const QModelIndex& index) const;

    /*!
     * \brief Récupère la donnée de l'index
     *
     * Méthode qui récupère la donnée de la case représentée par index.
     *
     *
     * \param index : La case du tableau à afficher.
     * \return QVariant() si l'index est invalide et QString ou Delegate sinon
     */
    virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole)
    const;

    /*!
     * \brief Récupère le nombre de ligne
     *
     * Méthode qui récupère le nombre de ligne en dessous du parent
     *(le nombre d'élément de la liste) parent est pour nous inutile
     *
     * \param parent : inutilisé dans la fonction
     * \return La taille de la liste
     */
    virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;

    /*!
     * \brief Récupère le nombre de colonne
     *
     * Méthode qui récupère le nombre de colonne pour le fils de parent.
     *Cela dépend de la classe passer en paramétre
     *
     * \param parent : inutilisé dans la fonction
     * \return Le nombre de colonne du model
     */
    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;

    /*!
     * \brief Récupère le titre de la colonne (section)
     *
     * Méthode qui récupère le titre de la colonne ou de la ligne.
     *Elle fais appel à la méthode getHeader de la classe A.
     *
     * \param section : Le numéro de la colonne ou de la ligne.
     * \param orientation : L'orientation de l'affichage : Qt::Horizontal ou
     *Qt::Vertical.
     * \param role : L'utilisation de la donnée : pour l'affichage ou pas.
     * \return Le nom de la colonne ou QVariant() sinon
     */
    QVariant headerData(int section, Qt::Orientation orientation,
                        int role = Qt::DisplayRole) const;

    /*!
     * \brief Insert des lignes.
     * \param row rows are inserted before this row, if 0 at the begin,
     * if rowCount() at the end
     * \param count number of rows to insert
     * \param parent parent model index, invalid for table models
     * \return true if successful
     */
    virtual bool insertRows(int, int, const QModelIndex& parent=QModelIndex());

    /*!
     * Remove rows.
     * \param row rows are removed starting with this row
     * \param count number of rows to remove
     * \param parent parent model index, invalid for table models
     * \return true if successful
     */
    virtual bool removeRows(int row, int count,
                            const QModelIndex& parent=QModelIndex());

    /*!
     * Get the resize modes to be used for the columns.
     * \return list of resize modes for the columns
     */
    QList<QHeaderView::ResizeMode> getHorizontalResizeModes() const;

    /*!
     *
     *
     */
    void setList(QList<DtAlbum *> &lAlbum);

    QList<DtAlbum *> getList() const;

private:
    QList<DtAlbum *> mAlbum;
};

#endif // MALBUM_H
